          SUBROUTINE (PASSER)
** Version# 121.0001[1] - 08/22/2016 - 10:24am - TSMITH - eclipse

*** Subroutine - SOE.INVOICE.PREVIEW
*-------------------------------------------------------------------------*
*** This routine is designed to 'run' the Invoice Preview Queue screen,
*** F3-Q-W.  In this screen the user can view, edit, or print invoices.
*** The user enters the Br/Tr/All Branches, Start Date, End Date, Slct Prt
*** Stats, Ship Via, Batch ID, and Invoice Status.  After the user has
*** entered all necessary info, the routine displays all the invoices that
*** meet the criteria.  On the screen the invoice's Order #, ShipDate,
*** Odr Stat, Prt Stat, Customer Name, and Ship Via.
*** Hot keys for this screen include View, Edit,
*** Invoice All, FReight, Chg Prt Stat, Find, Print, Hold, Add'l Select,
*** and Sort.
*** NOTE: If the user wants to select by a print status of 'N', they must
*** enter a date range.  This is because date range selections are done
*** out of the AR file (which includes 'N' print statuses) while
*** selections without a date range are done from the PRINT.QUEUE file
*** (which does not store invoices with a print status of 'N').
*-------------------------------------------------------------------------*
*** PASSER    - None Specified
*-------------------------------------------------------------------------*
*** COMMON VARIABLES
*** OID.DATA$ - Used for Imagine purposes.  It stores a list of invoices
***             that have an img attached.
*** DRPT$     - Is set to 'Invoice Preview Queue' flag
*-------------------------------------------------------------------------*
          SCREEN

          * Get user's last sort option and view
          * Keep this before the START: or it will get reset each time the
          * header is filled out.
          VALID.SORTS       = 'Manifest by Order #'
          VALID.SORTS<1,-1> = 'Ship Via by Order #'
          VALID.SORTS<1,-1> = 'Customer by Order #'
          VALID.SORTS<1,-1> = 'Order #'
          VALID.SORTS<1,-1> = 'Processed Date'

          EDIT.OK = NO

          GET.SCREEN.INFO 'SOE.INVOICE.PREVIEW','SEL.SORT',SEL.SORT
          LOCATE SEL.SORT IN VALID.SORTS<1> SETTING NA ELSE
             SEL.SORT = VALID.SORTS<1,1>
          END
          GET.SCREEN.INFO 'SOE.INVOICE.PREVIEW','VIEW',VIEW
          IF NOT(VIEW) THEN VIEW = 1

START:    CLEAR.SCREEN
          * Display column header based on screen view
          BEGIN CASE
          CASE VIEW = 1
             PRINT @(16,5):"ShipDate" "L#8"
          CASE VIEW = 2
             PRINT @(16,5):"ProcDate" "L#8"
          CASE VIEW = 3
             PRINT @(16,5):"InvStCde" "L#8"
          END CASE

          FITEM     = ''
          TABLE.DATA = ''
          SORT.IDS  = ''
          VSCROLL.DEFINE 1,1,6,78,14,'SOE.INVOICE.PREVIEW'
          VSCROLL.SET 1
          SEL.STATS = 'Q':VM:'P':VM:'H':VM:'T'
          SEL.SNUMS = 'I'
          INC.DIR   = "Include"
          IN.CONS   = 'Include'
          IN.LOTS   = 'Include'
          ST.DISP   = YES
          BRCHS     = ''
          PBRCH     = ''
          SDATE     = ''
          EDATE     = ''
          VIA       = ''
          BTCH      = ''
          ARREC     = ''
          INVST     = ''
          NPRT      = ''
          PBR       = ''
          VALID.PSTATS  = 'D:P':VM:'Q':VM:'B':VM:'M':VM:'H':VM:'E':VM
          VALID.PSTATS := 'N':VM:'T':VM:'C'
          MULTI.PSTATS  = 'P,Q,B,M,H,E,N,T,C'
          SORT.ID.REC   = ''
          INBODY.PSTATS = 'D:P - Detailed Invoice Preview Report':VM:'Q - Invoice Preview Queue':VM:'B - Batch Print':VM:'M - Flagged to be Placed on Manifest':VM:'H - Hold - No Batch Print':VM:'E - EDI':VM:'N - No Print or Already Printed'

          OE.STATUS.GET 'S',VALID.STATS,HELP.STATS
          CHECK.KEY 'SOE.CLOSED.ORDER.EDIT',ENTRY.OK,LVL

          MENU.LOAD 46,21,3,1,'S'
          MENU.LOAD 50,21,4,4,'T'
*-------------------------------------------------------------------------*
          *** Enter Branch/Tr/All
IN.BR:    INP.BR 15,1,8,BR,NAME,BRCHS,YES
          IF F12  OR QUIT THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.BR,IN.BR,IN.BR,IN.STATS
*-------------------------------------------------------------------------*
          *** Enter Starting Date
IN.SDATE: INP SDATE,15,2,10,'D4/',H_"IH#53"
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.SDATE,IN.SDATE,IN.BR,IN.VIA
*-------------------------------------------------------------------------*
          *** Enter Ending Date
IN.EDATE: INP EDATE,15,3,10,'D4/'
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.EDATE,IN.EDATE,IN.SDATE,IN.BTCH
*-------------------------------------------------------------------------*
          *** Select for Consolidated Invoices
IN.CON:   IF IN.LOTS[1,1] # 'O' AND INC.DIR[1,1] # 'O' THEN
IN$$9:       INP IN.CONS,15,4,7,V_"D:,Include,Exclude,Only"
             IF QUIT THEN GOTO FINISH
             IF IN.CONS[1,1] = 'O' THEN
                PRINT @(72,3):"Exclude" "L#7"
                PRINT @(72,4):"Exclude" "L#7"
             END
          END
          ON MOVE+1 GOTO IN.CON,IN.CON,IN.EDATE,IN.PBR
*-------------------------------------------------------------------------*
IN.STATS: *** Enter Slct Prt Stats
          SEL.STATS = ''
IN$$1:    INP SEL.STATS,40,1,15,'MCU',V_'*1D:,':MULTI.PSTATS
          GOSUB CHK.PRT.STAT
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.STATS,IN.BR,IN.STATS,IN.SNUMS
*-------------------------------------------------------------------------*
          *** Enter Ship Via
IN.VIA:   INP VIA,40,2,16,V_'S:VERF.BR.SHIPVIA,':BR
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.VIA,IN.SDATE,IN.STATS,IN.INVST
*-------------------------------------------------------------------------*
          *** Enter Batch ID
IN.BTCH:  INP BTCH,40,3,16
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.BTCH,IN.EDATE,IN.VIA,IN.DIRS
*-------------------------------------------------------------------------*
          *** Enter Price Branch/Territory/All
IN.PBR:   INP.BR 40,4,8,PBR,PNAME,PBRCH,YES,,,YES
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.PBR,IN.CON,IN.BTCH,IN.LOT
*-------------------------------------------------------------------------*
          *** Enter Include, Exclude, Only
IN.SNUMS: INP SEL.SNUMS,74,1,1,V_'D:,Include,Exclude,Only'
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.SNUMS,IN.STATS,IN.SNUMS,IN.SNUMS
*-------------------------------------------------------------------------*
          *** Enter Invoice Stats
IN.INVST: INP INVST,74,2,5,V_'C:VALID.USER.INV.STATUSES'
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO SEL.IT
          ON MOVE+1 GOTO IN.INVST,IN.VIA,IN.SNUMS,IN.INVST
*-------------------------------------------------------------------------*
          *** Select direct invoices only, all orders or no directs
IN.DIRS:  IF IN.CONS[1,1] # 'O' AND IN.LOTS[1,1] # 'O' THEN
IN$$10:      INP INC.DIR,72,3,7,V_"D:,Include,Exclude,Only"
             IF QUIT THEN GOTO FINISH
             IF INC.DIR[1,1] = 'E' THEN
                PRINT @(72,4):"Exclude" "L#7"
                IN.LOTS      = 'E'
             END ELSE
                IF INC.DIR[1,1] = 'O' THEN
                   PRINT @(15,4):"Exclude" "L#7"
                   PRINT @(72,4):"Include" "L#7"
                   IN.LOTS   = 'I'
                   IN.CONS   = 'E'
                END
             END
          END
          ON MOVE+1 GOTO IN.DIRS,IN.BTCH,IN.INVST,IN.DIRS,IN.LOT,IN.LOT
*-------------------------------------------------------------------------*
          *** Select for Lot Directs.
IN.LOT:   IF INC.DIR[1,1] # 'E' AND IN.CONS[1,1] # 'O' THEN
IN$$8:       INP IN.LOTS,72,4,7,V_"D:,Include,Exclude,Only"
             IF IN.LOTS[1,1] = 'O' THEN
                PRINT @(15,4):"Exclude" "L#7"
                PRINT @(72,3):"Include" "L#7"
                INC.DIR      = 'I'
                IN.CONS      = 'E'
             END
             IF QUIT THEN GOTO FINISH
          END
          ON MOVE+1 GOTO IN.LOT,IN.PBR,IN.DIRS,IN.LOT
*-------------------------------------------------------------------------*
SEL.IT:   *** Select and display qualifying invoices
          GOSUB CHK.PRT.STAT

          GOSUB SEL.IDS
          ID.CT = DCOUNT(TABLE.DATA,AM)

          IF ID.CT = 0 THEN
             MESS 20,8,BELL:'No Items Found'
             GOTO IN.BR
          END
          GOSUB DISPLAY

          MENU.LOAD  1,21,4,1,'V'
          MENU.LOAD  6,21,4,1,'E'
          MENU.LOAD 11,21,3,1,'I'
          MENU.LOAD 14,21,3,1,'A'
          MENU.LOAD 22,21,7,1,'P'
          MENU.LOAD 30,21,4,1,'F'
          MENU.LOAD 18,21,3,2,'R'
          MENU.LOAD 35,21,5,4,'N'
          MENU.LOAD 41,21,4,1,'H'
          MENU.LOAD 55,21,7,3,'G'
          MENU.LOAD 63,21,8,5,'D'
          MENU.LOAD 72,21,7,7,'O'

          LINE = 1; COL = 3; LASTKEY = 0; MOVE = 0
          LASTLINE = 0
*-------------------------------------------------------------------------*
MOVENEXT: *** Next cursor movement
          IF MOVE = 5 THEN MOVE = 4
          PARSEMOVE COL,LINE,4,ID.CT,14,YES

          ID = TABLE.DATA<LINE,2,1>
          LN = LINE
          GOSUB READ.IT
          AUTH.KEY = 'SOE.CLOSED.ORDER.EDIT'
          * Restoring OID, READ.IT sets OID to be the OID plus INVN
          OID = FIELD(ID,'.',1)
          CHECK.OE.CLOSED.AUTH.KEYS OID,GEN,AUTH.KEY,AUTH.CHK
          IF AUTH.CHK = NO THEN COL = 3
          IF NOT(ENTRY.OK) AND COL # 3 THEN COL = 3

          *** If this is a direct sales order which has been paid, we
          *** cannot let them edit any fields other than print status
          *** if they do not have the auth key authority and NEVER allow
          *** changing of shipdate for any user
          IF LINE # LASTLINE THEN GOSUB CHK.PAID
          IF LOCKED.DIR THEN
             CHECK.KEY 'SOE.EDIT.LOCKED.DIRECT',EDIT.OK
             IF EDIT.OK THEN
                IF VIEW # 3 AND COL = 1 THEN COL = 2
             END ELSE
                IF COL # 3 THEN COL = 3
             END
          END

          IF LINE # LASTLINE THEN GOSUB CHK.IMG
          LASTLINE = LINE
          ON COL GOTO IN.VIEW, IN.STAT, IN.PRT, IN.SVIA
*-------------------------------------------------------------------------*
IN.VIEW:  *** Input value of the current view (Process Date, Ship Date, or
          *** Invoice Status)
          IF VIEW # 3 THEN
IN.SHPDT:    INPV NDT,15,LINE,8,'D2/'
             IF CHANGED THEN
                CID    = TABLE.DATA<LINE,2,1>
                ID     = CID
                NEW.DT = NDT
                GOSUB CHG.DT
                IF ERR.MSG = 'GID Not Found' THEN
                   PRINT BELL:
                   GOTO IN.STAT
                END
                IF ERR.MSG = 'Lock Error' THEN GOTO IN.SHPDT
                IF ERR.MSG THEN
                   MESS 10,10,BELL:ERR.MSG
IN$$2:             INP A,H_"IH#54"
                END
                IF NOT(ERR.MSG) THEN
                   IF VIEW = 1 THEN
                      TABLE.DATA<LINE,1,2> = NDT
                   END ELSE
                      TABLE.DATA<LINE,1,7> = NDT
                   END
                END
                LN = LINE
                GOSUB DISP.LN
             END
          END ELSE
IN.ISTAT:    INPV NST,17,LINE,4,V_'C:VALID.USER.INV.STATUSES'
             IF CHANGED THEN
                INV.STAT = NST
                LN     = LINE
                AR.ID  = FIELD(TABLE.DATA<LINE,2,1>,'.',1):'.'
                AR.ID := FIELD(TABLE.DATA<LINE,2,1>,'.',2) "R%3"
                WRITEV INV.STAT ON ARFILE,AR.ID,27 ELSE INV.STAT = ''
                TABLE.DATA<LINE,1,8> = NST
                GOSUB DISP.LN
             END
          END
          IF F12  THEN GOTO FINISH
          IF QUIT THEN GOTO START
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.STAT:  INPV NEW.STAT,26,LINE,1,A_1
          IF CHANGED THEN
             BEGIN CASE
             CASE NEW.STAT = 'X'; CHK.KEY = 'SOE.CLOSED.ORDER.CANCEL'
             CASE OTHERWISE;      CHK.KEY = 'SOE.CLOSED.ORDER.OPEN'
             END CASE

             CHECK.KEY CHK.KEY,STAT.CHG.OK
             IF NOT(STAT.CHG.OK) THEN
                MESS 32,3,'No Editing Allowed'
                VPRINT 26,LINE,TABLE.DATA<LINE,1,3> "L#1"
                GOTO IN.STAT
             END

             LOCATE NEW.STAT IN VALID.STATS<1> SETTING SEL ELSE HELP=YES;SEL=1
             IF HELP THEN
                MENU.TABLE NEW.STAT,30,10,1,5,25,,,HELP.STATS,'Status',SEL
                IF NEW.STAT='' THEN PRINT BELL:; GOTO IN.STAT
                NEW.STAT = NEW.STAT[1,1]
             END
             ID  = TABLE.DATA<LINE,2,1>
             OID = FIELD(ID,'.',1)
             GID = FIELD(ID,'.',3)
             MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
             LOCATE GID IN LED(12)<1> SETTING GEN ELSE PRINT BELL:; GOTO IN.STAT
             OE.GET.QSIGN QSIGN,OID,GEN
             GET.CUS LED(2)<1,GEN,2>,LED(1)<1,GEN>,LED(5)<1,GEN>,QSIGN

             IF NEW.STAT='Q' OR NEW.STAT='P' AND LED(8)<1,GEN>='' THEN
                READV PRT.STAT FROM LEDLFILE,OID,9 ELSE PRT.STAT = ''
                VPRINT 32,LINE,PRT.STAT<1,GEN>              "L#1"
                PRINT BELL:
                GOTO IN.STAT
             END
             OE.LOCK.LED OID,LOCK.ERR
             IF LOCK.ERR THEN PRINT BELL:; GOTO IN.STAT
             OE.UPDATE.STATUS OID,GEN,-1,,NEW.STAT,ERRMSG
             OE.UNLOCK.LED OID
             IF NOT(ERRMSG) THEN
                TABLE.DATA<LINE,1,3> = NEW.STAT
             END
             LN = LINE
             GOSUB DISP.LN
          END
          IF F12 THEN GOTO FINISH
          IF QUIT THEN GOTO START
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.PRT:   XX     = INBODY.PSTATS
          ID     = TABLE.DATA<LINE,2,1>
          OID    = FIELD(ID,'.',1)

          *** If user is not authorized to make changes to gen,
          *** user will not be able to change print status either.
          IF AUTH.CHK = NO THEN
             MESS 32,3,'No Editing Allowed'
IN$$7:       INPV A,32,LINE,0
             IF F12 THEN GOTO FINISH
             IF QUIT THEN GOTO START
             GOTO MOVENEXT
          END

          READV CC.INFO FROM LEDFILE,OID,121 ELSE CC.INFO = ''
          CC.STR = 'C - Credit Card Authorization'
          IF CC.INFO<1,7> = 5 THEN
             LOCATE CC.STR IN INBODY.PSTATS<1> SETTING POS ELSE
                INBODY.PSTATS = INSERT(INBODY.PSTATS,1,POS;CC.STR)
             END
          END ELSE
             LOCATE CC.STR IN INBODY.PSTATS<1> SETTING POS THEN
                INBODY.PSTATS = DELETE(INBODY.PSTATS,1,POS)
             END
          END

IN$$3:    INPV NPRT,32,LINE,1,'MCU',V_INBODY.PSTATS,A_1
          IF CHANGED THEN MOVE = 0

          IF NOT(F12) AND NPRT='' THEN PRINT BELL:; GOTO IN.PRT
          IF CHANGED THEN
             ID  = TABLE.DATA<LINE,2,1>
             OID = FIELD(ID,'.',1)
             GID = FIELD(ID,'.',3)+0
             MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
             LOCATE GID IN LED(12)<1> SETTING GEN THEN
                IF NPRT='Q' OR NPRT='P' AND LED(8)<1,GEN>='' THEN
                   READV PRT.STAT FROM LEDLFILE,OID,9 ELSE PRT.STAT = ''
                   VPRINT 32,LINE,PRT.STAT<1,GEN>              "L#1"
                   PRINT BELL:
                   GOTO IN.PRT
                END

                IF NPRT = 'E' THEN
                   EDI.SETUP.CHECK LED(1)<1,GEN>,LED(5)<1,GEN>,EDI.OK
                   IF NOT(EDI.OK) THEN
                      MESS 10,1,BELL:'No EDI Profile Found'
                      GOTO IN.PRT
                   END
                END

                *** if we are switching the print status to a 'B' and
                *** there is credit card attached the we want to change
                *** the print status to a 'C' to authorize the credit card
                NEW.PRT = NPRT
                CREDIT.CARD.CHK.PRT.ST NEW.PRT,OID,GEN
                IF NEW.PRT # NPRT THEN
                   NPRT    = NEW.PRT
                   VPRINT 32,LINE,NPRT
                END

                OE.UPD.PRINT.STAT OID,GEN,NPRT
                IF NPRT # 'Y' AND NPRT # 'E' AND NPRT # 'F' THEN
                   OE.ADD.COMMENT OID,GEN,'Prt Status changed to : ':NPRT
                END
                IF NPRT = 'E' THEN
                   SOE.PRINT.DOCS OID
                END
             END ELSE
                PRINT BELL:
             END
          END
          IF F12 THEN GOTO FINISH
          IF QUIT THEN GOTO START
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
*** Allow the user to change the shipvia on the order
IN.SVIA:  OID = FIELD(ID,'.',1)
          GID = FIELD(ID,'.',3)+0
          MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
          LOCATE GID IN LED(12)<1> SETTING GEN ELSE GEN = 1
          NEW.VIA = LED(70)<1,GEN>
GET.SVIA: INPV NEW.VIA,62,LINE,16,"MCU",V_"S:VERF.BR.SHIPVIA,":LED(2)<1,GEN>
          IF F12 THEN GOTO FINISH
          IF QUIT THEN GOTO START

          IF CHANGED THEN
             OE.LOCK.LED OID,LOCK.MSG
             IF NOT(LOCK.MSG) THEN
                OE.GET.QSIGN QSIGN,OID,GEN
                OE.CHNG.SHIPVIA OID,GEN,NEW.VIA,,LED(70)<1,GEN>
                IF OID[1,1] = 'S' THEN
                   LED(64)<1,GEN> = ''
                   OE.TAX.CALC OID,GEN,QSIGN
                END
                UPDATE.LEDGER OID,GEN
                TABLE.DATA<LINE,1,6> = NEW.VIA
             END ELSE
                VPRINT 62,LINE,LED(70)<1,GEN>                    "L#16"
             END
             OE.UNLOCK.LED OID
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
DISPLAY:  * Display selected invoices
          BEGIN CASE
          CASE VIEW = 1
             PRINT @(16,5):"ShipDate" "L#8"
          CASE VIEW = 2
             PRINT @(16,5):"ProcDate" "L#8"
          CASE VIEW = 3
             PRINT @(16,5):"InvStCde" "L#8"
          END CASE

          LN.CT = DCOUNT(TABLE.DATA,AM)
          FOR LN = 1 TO LN.CT
             ID = TABLE.DATA<LN,2,1>
             GOSUB DISP.LN
          NEXT LN

          RETURN
*-------------------------------------------------------------------------*
DISP.LN:  *** Display invoice information
          GOSUB READ.IT
          VPRINT  0,LN,TABLE.DATA<LN,1,1>                "L#14"

          BEGIN CASE
          CASE VIEW = 1
             VPRINT 15,LN,OCONV(TABLE.DATA<LN,1,2>,'D2/')     "L#8"
          CASE VIEW = 2
             VPRINT 15,LN,OCONV(TABLE.DATA<LN,1,7>,'D2/')  "L#8"
          CASE VIEW = 3
             VPRINT 15,LN,SPACE(2):TABLE.DATA<LN,1,8>    "L#6"
          END CASE

          VPRINT 26,LN,TABLE.DATA<LN,1,3>                "L#1"
          VPRINT 32,LN,TABLE.DATA<LN,1,4>                "L#1"
          IF ST.DISP THEN
             VPRINT 36,LN,TABLE.DATA<LN,1,5>             "L#25"
          END ELSE
             VPRINT 36,LN,TABLE.DATA<LN,1,9>             "L#25"
          END
          VPRINT 62,LN,TABLE.DATA<LN,1,6>                "L#16"

          RETURN
*-------------------------------------------------------------------------*
CHK.PRT.STAT:*** Validate that a date range is entered when Print
             *** Status 'N' has been selected (in order to keep
             *** selection to a reasonable size)

          LOCATE 'N' IN SEL.STATS<1> SETTING PRT.POS THEN
             IF SDATE = '' THEN
                MESS 15,6, "Date Range required for print status of 'N'"
                RETURN TO IN.SDATE
             END
             IF EDATE = '' THEN
                MESS 15,6, "Date Range required for print status of 'N'"
                RETURN TO IN.EDATE
             END
          END

          RETURN
*-------------------------------------------------------------------------*
CHK.IMG:
          IF TABLE.DATA<LINE,2,6> THEN
             PRINT @(75,0):BLINK$:'*i*':NORM$
          END ELSE
             PRINT @(75,0):''
          END
          OID.DATA$ = TABLE.DATA<LINE,1,1>
          IMG.GEN = RAISE(TABLE.DATA<LINE,2,2>)<1,1,2>
          IF NOT(IMG.GEN) THEN IMG.GEN = 1
          OID.DATA$<2> = IMG.GEN

          RETURN
*-------------------------------------------------------------------------*
READ.IT:  *** Read invoice information to be displayed
          OID = FIELD(ID,'.',1)
          GID = FIELD(ID,'.',3)+0

          READV PRT.STAT FROM LEDLFILE,OID,9 ELSE PRT.STAT = ''

          MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
          MAT OLED = MAT LED
          LOCATE GID IN LED(12)<1> SETTING GEN ELSE RETURN

          IF LN # '' THEN
             TABLE.DATA<LN,1,4>=PRT.STAT<1,GEN>
             TABLE.DATA<LN,1,2>=LED(9)<1,GEN>
             TABLE.DATA<LN,1,6>=LED(70)<1,GEN>
          END

          IF LED(8)<1,GEN> # '' THEN OID = OID:'.':LED(8)<1,GEN>"R%3"

          RETURN
*-------------------------------------------------------------------------*
CHK.PAID: *** If this is a direct sales order that has been paid, we
          *** only want to allow user to edit print status, ship via,
          *** and freight if they have the proper auth key authority.
          *** Editing of ship date on a paid direct will ALWAYS be
          *** disabled regardless of authority.
          LOCKED.DIR = NO
          AP.ID      = ''   ;* set up for error message if needed

          LOCATE LED(33)<1,GEN> IN LED(12)<1> SETTING DGEN ELSE DGEN = GEN
          IF LED(6)<1,DGEN> # 'Y'                          THEN RETURN
          IF LED(8)<1,DGEN> # '' THEN INVN= LED(8)<1,DGEN> ELSE RETURN

          DAR.ID    = FIELD(ID,'.',1):'.':INVN  "R%3"
          READV AP.IDS FROM ARFILE,DAR.ID,2 ELSE AP.IDS = ''
          IF AP.IDS = ''                                   THEN RETURN

          AP.CT    = DCOUNT(AP.IDS,VM)
          FOR APN  = 2 TO AP.CT
             AP.ID = FIELD(AP.IDS<1,APN>,'.',2,2)      ;* payable ID

             IF AP.ID[1,1] = 'Y' THEN
                READV AP.STAT FROM ARFILE,AP.ID,20 ELSE AP.STAT = ''
                IF AP.STAT # 'X' THEN
                   *** Assume paid until proven otherwise
                   LOCKED.DIR = YES
                   READV PAYON FROM ARFILE,AP.ID,22 ELSE PAYON = ''
                   PAY.CT  = DCOUNT(PAYON,VM)
                   FOR PYN = 1 TO PAY.CT
                      QID  = AP.ID:'.':PAYON<1,PYN>

                      *** If record still exists in print queue file,
                      *** check has not been cut yet...
                      READ NOTHING FROM PQFILE,QID THEN
                         LOCKED.DIR = NO
                      END ELSE
                         LOCKED.DIR = YES
                         EXIT
                      END
                   NEXT PYN
                END
             END
             IF LOCKED.DIR THEN EXIT  ;* If at least one is paid, exit out
          NEXT APN

          RETURN
*-------------------------------------------------------------------------*
LOCK.IT:  OID = FIELD(ID,'.',1)
          GID = FIELD(ID,'.',3)+0
          OE.LOCK.LED OID,LOCK.MSG,NO
          MAT OLED = MAT LED
          READV PRT.STAT FROM LEDLFILE,OID,9 ELSE PRT.STAT = ''
          LOCATE GID IN LED(12)<1> SETTING GEN ELSE RETURN
          IF LED(8)<1,GEN>#'' THEN OID = OID:'.':LED(8)<1,GEN>"R%3"

          RETURN
*-------------------------------------------------------------------------*
PRINT.IT: *
          IF OPTION = 10 THEN OPTION = 1
          IF OPTION = 11 THEN OPTION = 2
          DRPT$ = 'Invoice Preview Queue'
          LN.CT = DCOUNT(TABLE.DATA,AM)
          PRT.ITEMS = ''
          FOR XX = 1 TO LN.CT
             PRT.ITEMS<-1> = TABLE.DATA<XX,2,1>
          NEXT XX
          PRT.ITEMS = LOWER(PRT.ITEMS)
          PRT.STATS = LOWER(SEL.STATS)
          PH.EXE 'SOE.PHR.INVOICE.PREVIEW',BR,BTCH,PRT.STATS,SDATE,EDATE,PRT.ITEMS,VIEW,FITEM
          IF OPTION = 2 THEN
             SEND.MESSAGE 'Phantom',USER.ID,'The Invoice Preview Report for Branch ':BR:' Has Been Sent to your Hold File.'
          END

          RETURN
*-------------------------------------------------------------------------*
SUBS:     ON OPTION GOTO FSEL,SORTING,VIEW.OID,VIEW.OID,INV.ONE,INV.ALL,CHNG.PRT,FINDIT,INV.FRT,PRINT.IT,PRINT.IT,CHANGE.VIEW,MASS.CHG.DT,BTST.DISP
*-------------------------------------------------------------------------*
CHANGE.VIEW: *** Change the current view.

          TEMP.VIEW = VIEW
          ITEMS     = 'Ship Date':VM:'Processed Date':VM
          ITEMS    := 'Invoice Status Code'
          MENU.TABLE WORD,30,10,1,5,25,,,ITEMS,,TEMP.VIEW

          LOCATE WORD IN ITEMS<1> SETTING VIEW ELSE VIEW = 1

          IF VIEW # TEMP.VIEW THEN
             GOSUB DISPLAY
             IF COL = 1 THEN RETURN TO IN.VIEW
          END

          RETURN
*-------------------------------------------------------------------------*
FSEL:     ***
          OLD.FITEM = FITEM
          FILTER.INPUT 'S',FITEM
          QUIT = NO
          IF TABLE.DATA # '' AND OLD.FITEM # FITEM THEN
             VCLR 1
             RETURN TO SEL.IT
          END

          RETURN
*-------------------------------------------------------------------------*
VIEW.OID: *** View Hot Key

          ID = TABLE.DATA<LINE,2,1>
          OID = FIELD(ID,'.',1)
          GID = FIELD(ID,'.',3)
          READV LED12 FROM LEDFILE,OID,12 ELSE LED12 = ''
          LOCATE GID IN LED12<1> SETTING GEN ELSE PRINT BELL:; RETURN
          VIEW.ONLY = (OPTION=3)
          READV INIT.VIEWS FROM INIFILE,USER.ID,21 ELSE INIT.VIEWS = ''
          INIT.VIEW = INIT.VIEWS<1,1>
          IF OID[1,1]='R' THEN
          OE.EXEC 'S',INIT.VIEW,OID,GEN,VIEW.ONLY
          END ELSE
          OE.EXEC OID[1,1],INIT.VIEW,OID,GEN,VIEW.ONLY
          END


          LN = LINE

          GOSUB DISP.LN

          RETURN
*-------------------------------------------------------------------------*
INV.ONE:  *** Invoice hot key
          ID = TABLE.DATA<LINE,2,1>
          GOSUB INV.OID

          RETURN
*-------------------------------------------------------------------------*
INV.ALL:  *** Invoice All hot key
          VAR = ''
IN$$4:    INP.PROMPT VAR,'Invoice all items (Y/N) : ','YN',1
          IF NOT(VAR) THEN RETURN
          SV.LINE = LINE
          FOR LINE = 1 TO ID.CT
          ID = TABLE.DATA<LINE,2,1>
          GOSUB INV.OID
          NEXT LINE
          LINE = SV.LINE

          RETURN
*-------------------------------------------------------------------------*
INV.OID:  ***
          OID = FIELD(ID,'.',1)
          GID = FIELD(ID,'.',3)+0
          MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
          LOCATE GID IN LED(12)<1> SETTING GEN ELSE PRINT BELL:; RETURN
          IF LED(8)<1,GEN> THEN RETURN
          OE.LOCK.LED OID,LOCK.ERR
          IF LOCK.ERR THEN RETURN
          OE.PROCESS.ORDER OID,GEN
UNLCK:    OE.UNLOCK.LED OID
          LN = LINE
          GOSUB DISP.LN

          RETURN
*-------------------------------------------------------------------------*
BUILD.SEL.DATA:
          SEL.DATA = ''
          SEL.DATA<1> = BRCHS
          SEL.DATA<2> = BTCH
          SEL.DATA<3> = SDATE
          SEL.DATA<4> = EDATE
          SEL.DATA<5> = SEL.SNUMS
          SEL.DATA<6> = INVST
          SEL.DATA<7> = VIA
          SEL.DATA<8> = SEL.STATS
          SEL.DATA<9> = SEL.SORT
          SEL.DATA<10> = FITEM
          SEL.DATA<11> = IN.CONS
          SEL.DATA<12> = PBRCH
          SEL.DATA<13> = INC.DIR
          SEL.DATA<14> = IN.LOTS
          SEL.DATA<15> = ST.DISP
          RETURN
*-------------------------------------------------------------------------*
SEL.IDS:  *** Selects the invoices that meet the criteria entered by user
          GOSUB BUILD.SEL.DATA
          ACTIVE.INST = ''
          ACTIVE.INST<1,2> = 'start date':SVM:'end date':SVM:'print statuses'
          ACTIVE.INST<1,3> = SDATE:SVM:EDATE:SVM:LOWER(LOWER(SEL.STATS))
          QUEUE.SELECT.IPQ IDS,ACTIVE.INST
          QUEUE.FILTER.IPQ IDS, SEL.DATA
          QUEUE.SORT.IPQ IDS,SEL.DATA,TABLE.DATA
          RETURN
*-------------------------------------------------------------------------*
CHNG.PRT: *** Chg Prt Stat hot key
          NPRT = ''
          IF AUTH.CHK = NO THEN
             ITEM.TXT = 'Next Editable'
          END ELSE
             ITEM.TXT = 'Current'
          END
          PROMPT = 'Change Print Status for ':ITEM.TXT:' Item thru End to : '

IN$$5:    INP.PROMPT NPRT,PROMPT,'MCU',1,INBODY.PSTATS
          IF QUIT THEN RETURN
          IF NPRT='' THEN PRINT BELL:; GOTO CHNG.PRT
          FOR LN = LINE TO ID.CT
             ID  = TABLE.DATA<LN,2,1>
             OID = FIELD(ID,'.',1)
             GID = FIELD(ID,'.',3)+0
             MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
             LOCATE GID IN LED(12)<1> SETTING GEN THEN
                AUTH.KEY = 'SOE.CLOSED.ORDER.EDIT'
                CHECK.OE.CLOSED.AUTH.KEYS OID,GEN,AUTH.KEY,LN.AUTH.CHK
                IF LN.AUTH.CHK = NO THEN CONTINUE
                IF NPRT = 'E' THEN
                   EDI.SETUP.CHECK LED(1)<1,GEN>,LED(5)<1,GEN>,EDI.OK
                   IF NOT(EDI.OK) THEN
                      A = ''
                      MESS 10,1,BELL:'No EDI Profile Found For :':OID:'  Hit Any Key to Continue'
IN.WAIT:              INP A,,,0
                      CONTINUE
                   END
                END

                CREDIT.CARD.CHK.PRT.ST NPRT,OID,GEN

                OE.UPD.PRINT.STAT OID,GEN,NPRT
                VPRINT 32,LN,NPRT  "L#1"
                IF NPRT # 'Y' AND NPRT # 'E' AND NPRT # 'F' THEN
                   OE.ADD.COMMENT OID,GEN,'Prt Status changed to : ':NPRT
                END

                *** if the status got switched to a 'C' for credit card
                *** then we need to switch the status back to a 'B'
                *** to check the rest of the invoices
                IF NPRT = 'C' THEN NPRT = 'B'
             END
          NEXT LN

          ID     = TABLE.DATA<LINE,2,1>
          OID    = FIELD(ID,'.',1)

          READV CC.INFO FROM LEDFILE,OID,121 ELSE CC.INFO = ''
          CC.STR = 'C - Credit Card Authorization'
          IF CC.INFO<1,7> = 5 THEN
             LOCATE CC.STR IN INBODY.PSTATS<1> SETTING POS ELSE
                INBODY.PSTATS = INSERT(INBODY.PSTATS,1,POS;CC.STR)
             END
          END ELSE
             LOCATE CC.STR IN INBODY.PSTATS<1> SETTING POS THEN
                INBODY.PSTATS = DELETE(INBODY.PSTATS,1,POS)
             END
          END

          MOVE = 0; QUIT = 0; F12 = 0

          RETURN TO MOVENEXT
*-------------------------------------------------------------------------*
FINDIT:   *** Find hot key
          ID = ''
IN$$6:    INP.PROMPT ID,'Enter Invoice # : ','MCU',14
          IF INDEX(ID,'.',1) THEN
             WRK.OID = FIELD(ID,'.',1)
             WRK.INVN= FIELD(ID,'.',2)+0
             ID = WRK.OID:'.':WRK.INVN
          END
          FINDSTR ID IN TABLE.DATA SETTING LINE ELSE NULL

          RETURN
*-------------------------------------------------------------------------*
INV.FRT:  *** Allow changing of freight values
          IF LOCKED.DIR THEN
             CHECK.KEY 'SOE.EDIT.LOCKED.DIRECT',EDIT.OK
          END ELSE
             EDIT.OK = YES
          END
          IF NOT(EDIT.OK) THEN PRINT BELL:; RETURN

          CHK.GL.POST LED(23)<1,GEN>,OK,OID,'S'
          IF NOT(OK) THEN
             MESS 10,10,BELL:'Cannot change freight, order is in a closed period.'
             RETURN
          END

          ID = TABLE.DATA<LINE,2,1>
          QSIGN = -1
          GOSUB LOCK.IT

          TOID      = FIELD(OID,'.',1)
          VIEW.ONLY = YES
          IF LOCK.MSG = '' THEN
             VIEW.ONLY = NO
          END

          MATREAD CUS  FROM CUSFILE,LED(1)<1,GEN> ELSE MAT CUS  = ''
          MATREAD CUSS FROM CUSFILE,LED(5)<1,GEN> ELSE MAT CUSS = ''
          SOE.FGHT.CALC TOID,GEN,QSIGN,,VIEW.ONLY
          IF NOT(VIEW.ONLY) THEN
             GEN.MVT = GEN
             OE.TAX.CLEAR OID,GEN.MVT
             OE.TAX.CALC OID,GEN.MVT,QSIGN
             UPDATE.LEDGER TOID,GEN.MVT
             OE.UNLOCK.LED TOID
          END

          RETURN
*-------------------------------------------------------------------------*
SORTING:  *
          OLD.SORT = SEL.SORT
          LOCATE SEL.SORT IN VALID.SORTS<1> SETTING SEL.POS ELSE SEL.POS=1
          MENU.TABLE SEL.SORT,30,10,1,5,25,,,VALID.SORTS,,SEL.POS
          QUIT = NO
          SORT.IDS = ''
          IF TABLE.DATA # '' THEN
             WINDOW ,,40,3,3
             PRINT @(0,1):BLINK$:'Sorting Items.... ':NORM$:
             GOSUB BUILD.SEL.DATA
             IDS = TABLE.DATA
             QUEUE.SORT.IPQ IDS,SEL.DATA,TABLE.DATA
             WINDOW.CLOSE
             GOSUB DISPLAY
           END

          RETURN
*-------------------------------------------------------------------------*
MASS.CHG.DT: * Change the ship date of all currently shown orders.
          IF AUTH.CHK = NO THEN
             ITEM.TXT = 'Next Editable'
          END ELSE
             ITEM.TXT = 'These'
          END
          O.PROMPT = 'Enter New Shipdate For ':ITEM.TXT:' Invoices: '
          GL.CLOSE.DT.GET 'S',CLS.DT
          MASS.DT = OCONV(DATE(),'D2/')
INMASS1:  INP.PROMPT MASS.DT,O.PROMPT,'D2/',8
          IF F12 THEN RETURN
          * Check to see if the new date is before the GL Close date.
          IF CHANGED AND MASS.DT <= CLS.DT THEN
             O.PROMPT = 'That Date Is In A Closed Period!  Please':AM
             O.PROMPT:= 'Enter New Shipdate For These Invoices: '
             MASS.DT = OCONV(CLS.DT+1,'D2/')
             GOTO INMASS1
          END

          * Loop through all the selected ids, popping up error boxes
          * as they are encountered.
          SEL.CT = DCOUNT(TABLE.DATA,AM)
          FOR SX = 1 TO SEL.CT
             CID      = TABLE.DATA<SX,2,1>
             ID       = CID
             NEW.DT   = MASS.DT
             ERR.SKIP = NO

             GOSUB CHG.DT

             * If we encountered an error when calling OE.CHANGE.SHIPDATE
             * that caused the date to not be changed, then skip to the
             * next line
             IF ERR.SKIP THEN CONTINUE

             * This is for errors encountered prior to the call to
             * OE.CHANGE,SHIPDATE
             IF ERR.MSG THEN
                IF LED(8)<1,GEN> = '' THEN
                   AR.ID = OID:'.':GID "R%4"
                END ELSE
                   AR.ID = OID:'.':LED(8)<1,GEN> "R%3"
                END
                O.MESS = AR.ID:AM:ERR.MSG
                ERR.MESS 10,10,O.MESS
                CONTINUE
             END

             LN = SX
             TABLE.DATA<LN,1,2> = NEW.DT
             GOSUB DISP.LN
          NEXT SX

          MOVE = 0; QUIT = 0; F12 = 0

          RETURN TO MOVENEXT
*-------------------------------------------------------------------------*
BTST.DISP: *** Toggle hotkey to display the customer as Bill-To or Ship-To
          IF ST.DISP THEN
             PRINT @(72,21):"Ship" "L#4"
             PRINT @(42, 5):"Bill" "L#4"
             ST.DISP = NO
          END ELSE
             PRINT @(72,21):"Bill" "L#4"
             PRINT @(42, 5):"Ship" "L#4"
             ST.DISP = YES
          END
          GOSUB DISPLAY
          RETURN
*-------------------------------------------------------------------------*
CHG.DT:   * Routine to be used by any section of the code that deals with
          * changing the shipdate of a specific gen.
          * Pre-req's: CID = Order:".":INVN:".":GID, NEW.DT = new date
          * Post-req's: ERR.MSG is set if there's an error.
          ERR.MSG = ''

          OID = FIELD(CID,'.',1)
          GID = FIELD(CID,'.',3)
          MATREAD LED FROM LEDFILE,OID ELSE MAT LED = ''
          LOCATE GID IN LED(12)<1> SETTING GEN ELSE
             ERR.MSG = 'GID Not Found'
             RETURN
          END

          *** Do not allow change of shipdate if user is not auth
          AUTH.KEY = 'SOE.CLOSED.ORDER.EDIT'
          CHECK.OE.CLOSED.AUTH.KEYS OID,GEN,AUTH.KEY,LN.AUTH.CHK
          IF LN.AUTH.CHK = NO THEN
             ERR.MSG  = 'No Editing Allowed.'
             ERR.SKIP = YES
             RETURN
          END

          *** Do not allow change of shipdate if this is a paid direct
          *** sales order
          ID = CID
          GOSUB CHK.PAID
          IF LOCKED.DIR THEN
             ERR.MSG = 'Paid Direct on ':AP.ID
             RETURN
          END

          OE.LOCK.LED OID,LOCK.ERR
          IF LOCK.ERR THEN
             ERR.MSG = 'Lock Error'
             RETURN
          END

          OE.GET.QSIGN QSIGN,OID,GEN
          LOG.MV = ''
          OLD.SHPDT = LED(9)<1,GEN>
          GET.CUS LED(2)<1,GEN,1>,LED(1)<1,GEN>,LED(5)<1,GEN>,QSIGN

          LED.99      = TRIM(LED(99)<1>,VM,"T")
          LED.100     = TRIM(LED(100)<1>,VM,"T")
          IS.CONV.ORD = ((LED.99 # "") OR (LED.100 # ""))
          IF NOT(IS.CONV.ORD) THEN
             CHK.AVAIL = YES
             CHK.ONLY  = YES
             ERRMSG    = ''
             ERR.CODE  = ''
             *** On sales orders we need to run a check first to determine
             *** if the sales order has been paid. If the user has the auth
             *** key OE.CLOSED.CHANGE.SHIPDATE then we just warn them
             *** otherwise we are going to through an error and disallow.
             *** We need to run a similar check if the PO side of direct
             *** has been reconciled.  If so, we will warn user
             OE.CHANGE.SHIPDATE OID,GEN,NEW.DT,QSIGN,LOG.MV,CHK.AVAIL,ERRMSG,YES,,ERR.CODE
             BEGIN CASE
             *** 5 = Authorized for cash receipt action
             *** 6 = PO side of reconciled payable
             CASE ERR.CODE = 5 OR ERR.CODE = 6
                MSG     = ERRMSG
                CONVERT VM TO AM IN MSG
                MSG<-1> = 'Continue (Y/N) : '
                SURE    = 'N'
IN$$21:         INP.PROMPT SURE,MSG,'YN',1
                ERRMSG  = ''
                IF SURE THEN
                   OE.CHANGE.SHIPDATE OID,GEN,NEW.DT,QSIGN,LOG.MV,CHK.AVAIL,ERRMSG
                END ELSE
                   ERR.SKIP = YES
                   GOTO UNLOCK
                END
             CASE NOT(ERRMSG)       ;* Change Ship Date
                OE.CHANGE.SHIPDATE OID,GEN,NEW.DT,QSIGN,LOG.MV,CHK.AVAIL,ERRMSG
             CASE OTHERWISE         ;* Error and not auth.
             END CASE

             *** Something went wrong so reset and return to prompt
             IF ERRMSG THEN
                IF ERR.CODE = 4 THEN
                   ERR.MESS 10,10,ERRMSG
                END ELSE
                   MESS 10,10,BELL:ERRMSG
                END
                ERR.SKIP = YES
             END ELSE
                OE.ADD.COMMENT OID,LOG.MV,'Changed Shipdate From ':OCONV(OLD.SHPDT,'D4/'):' to ':OCONV(LED(9)<1,GEN>,'D4/')
             END
          END
UNLOCK:   OE.UNLOCK.LED OID

          RETURN
*-------------------------------------------------------------------------*
FINISH:   * Close up shop
          * Validate and save the user's sort option and view
          LOCATE SEL.SORT IN VALID.SORTS<1> SETTING NA ELSE
             SEL.SORT = VALID.SORTS<1,1>
          END
          SET.SCREEN.INFO 'SOE.INVOICE.PREVIEW','SEL.SORT',SEL.SORT
          IF NOT(VIEW) THEN VIEW = 1
          SET.SCREEN.INFO 'SOE.INVOICE.PREVIEW','VIEW',VIEW


          WINDOW.CLOSE
          RETURN
!TSMITH~08/22/16~10:24
